const {exec, execSync, spawn, spawnSync, execFile, execFileSync, fork } = require('child_process');
// 1. exec      异步方法 => ()=>{ return buffer } 执行shell命令，或者与软件交互
/**
 * @param {string} err 失败的信息
 * @param {string} stdout 返回的标准输出流
 * @param {string} stderr 失败的输出流
 */
exec('node -v', (err, stdout, stderr) => { 
  if(err){
    return err
  }
  console.log('stdout',stdout.toString()) // v18.16.0
})
// 2. execSync  同步方法
console.log('execSync',execSync('node -v').toString()) // v18.16.0
// execFileSync('start chrome http://www.baidu.com')
// execFileSync('D:\\qq\\QQ.exe')

// 3. spawn      使用较多，无字节上限
const { stdout } = spawn('netstat')
stdout.on('data', msg => console.log('msg', msg.toString()))
stdout.on('close', msg => console.log('结束了',))
// 4. spawnSync  使用较少
// 5. execFile
// 6. execFileSync
// 7. fork  只能接收js模块，帮js创建子进程